package newsSystem.Admin;
import newsSystem.dao.NewsInfoJDBC;
import newsSystem.news.NewsADDJFrame;
import newsSystem.news.NewsEditJFrame;
import newsSystem.news.NewsInfo;
import newsSystem.news.NewsManager;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import static newsSystem.dao.NewsInfoJDBC.newsDeleteJDBC;


public class AdminPageOneJPane {
    private static JTable table1;//报刊信息面板
    static List<NewsInfo> newsList;

    // 添加一个方法用于清空表格内容
    public static void clearTable() {
        System.out.println("清空列表数据");
        newsList.clear();
    }
    public static JPanel createPage() {
        DefaultTableModel tableModel = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int row, int column) {
                // 设置所有单元格不可编辑
                return false;
            }
        };
// 调用NewsJDBC方法
        NewsInfoJDBC.newsJDBC();
//        报刊列表
        newsList=NewsManager.getNewsList();
        // 添加表头
        String[] columnNames = {"报刊编号", "报刊名", "出版社", "每月报价", "报刊摘要", "报刊出版日期","报刊分类名称","报刊部门"};

        tableModel.setColumnIdentifiers(columnNames);
        // 创建表格
//        table1.setModel(null);
        table1 = new JTable(tableModel);
//        table1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置选择模式
        // 设置表头的字体大小
        JTableHeader header = table1.getTableHeader();
        Font headerFont = new Font("幼圆", Font.BOLD, 18); // 设置表头字体
        header.setFont(headerFont);
// 设置表格的字体
        Font tableFont = new Font("黑体", Font.PLAIN, 16); // 定义表格字体样式
        table1.setFont(tableFont);

// 设置表格的行高
        table1.setRowHeight(30); // 设置每行的高度为30像素
        // 将报刊列表数据添加到表格中
        for (NewsInfo news : newsList) {
            Object[] rowData = {news.getNewsID(), news.getNewsName(), news.getNewsPublish(),news.getMPrice(),news.getNewsContent(),news.getNewsData(),news.getNewsCNo(),news.getNewsDept()};
            tableModel.addRow(rowData);
        }

        // 添加鼠标点击事件监听器
        table1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // 获取被选中的行索引
                int rowIndex = table1.getSelectedRow();
                System.out.println("Selected Row Index: " + rowIndex);
                int orderno = 0;
                if (rowIndex != -1) { // 如果有行被选中
                    // 从原始数据列表中获取对应的 OrderInfo 对象
                    NewsInfo selectedOrder = newsList.get(rowIndex);
                    // 进行操作，比如输出订单编号
//                    orderno = selectedOrder.getOrderNo();
//                    System.out.println("选中的订单编号：" + selectedOrder.getOrderNo());
                }
            }
        });



        JPanel page = new JPanel();
        page.setBounds(0, 0, 900, 450);
        page.setLayout(null); // 使用 null 布局

        JButton deleteUserButton = new JButton("删除报刊");
        // 创建增加用户按钮并添加动作监听器
        JButton addUserButton = new JButton("增加报刊");

        JButton EditUserButton = new JButton("编辑报刊");


//        点击事件操作
        deleteUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 在这里编写删除报刊的逻辑
                // 获取用户点击的行索引
                int rowIndex = table1.getSelectedRow();

                if (rowIndex != -1) {
                    // 获取对应行的新闻ID
                    int newsID = (int) table1.getValueAt(rowIndex, 0); // 假设新闻ID在第一列
                    System.out.println(newsID);
                    // 显示删除成功的提示框
                    JOptionPane.showMessageDialog(null, "报刊删除成功！", "提示", JOptionPane.INFORMATION_MESSAGE);
                    // 调用数据库删除方法删除对应的新闻
                    newsDeleteJDBC(newsID); // 假设deleteNewsByID方法已经实现
                    // 重新渲染表格
                    refreshTable();
                } else {
                    // 提示用户选择要删除的数据行
                    JOptionPane.showMessageDialog(null, "请点击需要删除的数据行", "提示", JOptionPane.WARNING_MESSAGE);
                }
            }
        });

// 增加报刊按钮

        addUserButton.addActionListener(new ActionListener() {
//            在原始窗口中，实现 OnNewsAddedListener 接口，并在其 onNewsAdded() 方法中更新数据：
            @Override
            public void actionPerformed(ActionEvent e) {
                NewsADDJFrame addFrame = new NewsADDJFrame();
                addFrame.setOnNewsAddedListener(new NewsADDJFrame.OnNewsAddedListener() {
                    @Override
                    public void onNewsAdded() {
                        // 重新渲染页面
                        refreshTable();
                    }
                });
            }
        });

// 编辑报刊按钮
//        JButton editUserButton = new JButton("编辑报刊");
        EditUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = table1.getSelectedRow();
                if (selectedRow != -1) { // 检查是否有行被选中
                    // 获取选中行的数据信息
                    NewsInfo selectedNews = newsList.get(selectedRow);
                    // 创建编辑窗口，并传入回调函数
                    NewsEditJFrame editFrame = new NewsEditJFrame(selectedNews, new NewsEditJFrame.EditCallback() {
                        @Override
                        public void onEditSuccess(NewsInfo updatedNews) {
                            // 编辑成功后更新数据到页面
                            newsList.set(selectedRow, updatedNews);
                            JOptionPane.showMessageDialog(null, "报刊信息编辑成功", "提示", JOptionPane.WARNING_MESSAGE);
                            // 重新渲染页面，具体实现根据你的界面逻辑来操作
                            refreshTable();// 假设有一个方法用于重新渲染页面
                        }
                    });
                    editFrame.setVisible(true);
                } else {
                    JOptionPane.showMessageDialog(null, "请先选中一行数据", "提示", JOptionPane.WARNING_MESSAGE);
                }
            }
        });// 所有报刊


        JButton AllUserButton = new JButton("所有报刊");
        AllUserButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 在这里编写编辑报刊的逻辑
                refreshTable();
            }
        });



        JTextField queryTextField = new JTextField(10);
        JButton  queryButton = new JButton("查询报刊");
        queryButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String queryText = queryTextField.getText(); // 获取文本框中的内容
                System.out.println(queryText);
                try {
                    int queryID = Integer.parseInt(queryText); // 将文本内容转换为整数

                    // 遍历newsList，查找与queryID匹配的newsID
                    for (NewsInfo news : newsList) {
                        if (news.getNewsID() == queryID) { // 假设News类中有一个方法getNewsID()来获取newsID
                            // 渲染匹配的数据到表格上
                            // 假设refreshTable()方法用于重新渲染表格
                            renderDataToTable(news);
                            return; // 找到匹配的newsID后，不再继续遍历
                        }
                    }

                    // 如果未找到匹配的newsID，则显示提示消息
                    JOptionPane.showMessageDialog(null, "未找到匹配的报刊", "提示", JOptionPane.WARNING_MESSAGE);
                } catch (NumberFormatException ex) {
                    // 处理无法转换为整数的情况
                    JOptionPane.showMessageDialog(null, "请输入有效的整数", "提示", JOptionPane.ERROR_MESSAGE);
                }
            }
        });





//        JButton RUserButton = new JButton("编辑报刊");

        // 将两个按钮添加到 BorderLayout.CENTER 区域实现居中
        JPanel centerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        centerPanel.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("报刊信息管理"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)));

        centerPanel.add(addUserButton);
        centerPanel.add(deleteUserButton);
        centerPanel.add(EditUserButton);
        centerPanel.add(AllUserButton);
        centerPanel.add(queryTextField);
        centerPanel.add(queryButton);


        JPanel optionPane = new JPanel();
        optionPane.setBounds(0, 0, 900, 90);
        optionPane.setLayout(new BorderLayout()); // 使用边界布局

        optionPane.add(centerPanel, BorderLayout.SOUTH);        // 将包含按钮的面板添加到 CENTER 区域
//        optionPane.setBorder(new LineBorder(Color.blue));
        page.add(optionPane); // 将 OptionPane 添加到 page



        JScrollPane scrollPane = new JScrollPane(table1);
        scrollPane.setBorder(null);
        scrollPane.setBounds(0, 90, 900, 360);
        page.add(scrollPane); // 将 JScrollPane 添加到 page 上
        return page;
    }
    // 定义方法用于重新渲染表格
    private static void refreshTable() {
        // 清空表格模型中的数据
        DefaultTableModel tableModel = (DefaultTableModel) table1.getModel();
        tableModel.setRowCount(0);
        clearTable();
        // 调用NewsJDBC方法
        NewsInfoJDBC.newsJDBC();
//        报刊列表
        newsList=NewsManager.getNewsList();
        // 重新将新闻列表数据添加到表格中
        for (NewsInfo news : newsList) {
            Object[] rowData = {news.getNewsID(), news.getNewsName(), news.getNewsPublish(),news.getMPrice(),news.getNewsContent(),news.getNewsData(),news.getNewsCNo(),news.getNewsDept()};
            tableModel.addRow(rowData);
        }
    }
    // 渲染数据到表格的方法
    private static void renderDataToTable(NewsInfo news) {
        // 清空表格模型中的数据
        DefaultTableModel tableModel = (DefaultTableModel) table1.getModel();
        tableModel.setRowCount(0);
        // 添加数据到表格
        Object[] rowData = {news.getNewsID(), news.getNewsName(), news.getNewsPublish(),news.getMPrice(),news.getNewsContent(),news.getNewsData(),news.getNewsCNo(),news.getNewsDept()};
        tableModel.addRow(rowData);// 根据需要添加更多列
    }
}
